#pragma once

#include <windows.h>
#include <string>

#define MAX_NAME_LENGTH 260

#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])

#define UNKNOWN_ID_U64 0xFFFFFFFFFFFFFFFF
#define UNKNOWN_ID_U32 0xFFFFFFFF
#define UNKNOWN_ID_U16 0xFFFF
#define UNKNOWN_ID_U8  0xFF

//#define TRUE  1;
//#define FALSE 0;

#define VIALATIO

namespace Violations
{
  const char Out_of_range[]    = "[OUT OF RANGE]";
  const char Value_not_valid[] = "[VALUE NOT VALID]";
  const char Null_pointer_access[] = "[NULL POINTER ACCESS]";
}

namespace Math
{
  /**
   * Search answare on the questions: how many times is necesary to multiply "min" parameter on 2
   * to get equality of "max" parameter;
   * Pseudocode: if( max == min*(2^n) ) return n; where n=[1..infinity);
   */
  UINT64 PowerOf2In(UINT64 max, UINT64 min);
}

std::wstring StringToWString(const std::string& s);
std::string  WStringToString(const std::wstring& s);
std::wstring to_wstring(unsigned long val);